package com.example.demo01.controllter.exception;

import java.util.Scanner;

/**
 * @author Mark
 * @date 2020/8/2 16:07
 * @description 被除数异常(程序遇到错误, 迫使程序不能运行, 简称异常) - 子类异常必须在父类异常
 * throw抛出单个异常/throws抛出多个异常
 */
public class BaseByZeroException {

    /*========================================================*/
    /*
     * 异常是什么？
     * 程序遇到错误, 迫使程序不能运行, 简称异常
     * throw和throws的区别
     * throw抛出一个异常,常与if使用
     * throws抛出多个异常,常在方法上使用
     * */
    /*========================================================*/
    /*
         *  异常种类
         * Throwable
         *   -- Exception
         *       -- RunTimeException
         *           -- ArithmeticException
         *           -- 自定义异常
         *       -- 编译时异常
         *           -- SQLException
         *           -- FileNotException
         *   -- Error
         *      -- 程序直接报错,不能运行
     * */
    /*========================================================*/
    /*
     *   格式
     * try{
     *   XXXcode
     * }catch(Exception01 e01){
     *   e01.printStackTrace();
     * }catch(Exception02 e02){
     *   e02.printStackTrace();
     * }catch(Exception 03 e03){
     *   e03.printStackTrace();
     * }finally{
     *   e.close;
     * }
     *
     * */
    /*========================================================*/
    /*
     *  自定义异常
     * public class XXXxx extends RuntimeException{
     *       public XXXxx(){
     *          super("xxx消息")
     *      }
     * }
     * */
    /*========================================================*/

    /**
     * @param a 除数
     * @param b 被除数
     * @return 异常或结果
     * @throws BaseException       抛出多个,调用者必须处理，要么try{}catch(){},要么继续抛出(>method的抛出异常)
     * @throws ArithmeticException 抛出多个
     */
    public static int divide(int a, int b) throws BaseException, ArithmeticException, Exception {
        if (b == 0) {
            throw new BaseException("除数不能为0");
            // 抛出异常对象而且不能抛出多个(与if一起使用)
            // throw new ArithmeticException();
        }
        return a / b;

    }

    public static void main(String[] args) throws Exception {
        System.out.println("请输入一个除数(整数)");
        Scanner scanner = new Scanner(System.in);
        int a = scanner.nextInt();
        System.out.println("请输入一个被除数(整数)");
        int b = scanner.nextInt();
        try {
            int c = a / b;
            System.out.println("c = " + c);
        } catch (ArithmeticException e) {
            e.printStackTrace();
            throw new BaseException("除数不能为零");
        } finally {
            System.out.println("程序执行到finally");

        }

        // 使用自定义异常(程序遇到错误，迫使程序不能运行，简称异常)
        System.out.println("divide(a, b) = " + divide(a, b));
        System.out.println("程序执行完了");
    }
}
